<?php
namespace models;

require('./sql/mysql.php');

class UsersModel extends \sql\mysql
{
    protected $table = array('users');              // 数据库表的名字
    protected $field = ['username', 'password'];    // 返回的用户名和密码字段
    // protected $whre = [];

    /**
     * 构造函数，连接数据库
     */
    public function __construct()
    {
        parent::connect();
    }

    /**
     * 获取用户主页数据
     * @return array $returnMessage 返回的信息，和操作的状态
     * @return array $retval 返回用户主页的数据
     */
    public function getIndex(){
        // 获取任务列表数据
        $where = ['leader="' . USER . '" OR principal="' . USER . '"'];
        $table = ['task'];
        $result = $this->select($table, null, $where);
        // 获取任务统计数据
        $field = ['principal', 'COUNT(*)'];
        $whereGroup = ['leader="' . USER . '"', 'status="1"'];
        $group = ['principal'];
        $resultGroup = $this->group($table, $field, $whereGroup, $group);
        // 检查获取数据
        if (!$result->num_rows && $resultGroup->num_rows){
            return $returnMessage = array('message' => '获取数据失败!', 'status' => false);
        } else {
            // 将查询的数据解析为数组
            $result = $this->transform($result);
            $resultGroup = $this->transform($resultGroup);
            // 将统计数据重组为键值对
            $data = [];
            foreach($resultGroup as $value) {
                $data[$value['principal']] = $value['COUNT(*)'];
            }
            // 取消引用
            // unset($value);
            // 计算比重数据
            $total = 0;
            foreach($result as $value) {
                if($value['leader'] == USER) {
                    $total += 1;
                }
            }
            // 计算比例，并限制浮点精度为 4
            foreach($data as $key => $value) {
                $data[$key] = round($value / $total, 4);
            }
            // 返回拼接的用户主页数据
            $retval = [$result, $data];
            return $retval;
        }
    }

    /**
     * 添加用户
     * @param array 添加的用户数据
     * @return array $returnMessage 返回的信息，和操作的状态
     */
    public function addUser($data)
    {
        $where[] = 'username="' . $data['username'] . '"';
        $result = $this->select($this->table, $this->field, $where);
        // 检查用户是否存在
        if (!$result->num_rows) {
            // 如果用户不存在，插入数据库
            $retval = $this->insert($this->table, $data);
            // 判断是否插入成功
            if (!$retval) {
                return $returnMessage = array('message' => '注册失败!', 'status' => false);
            } else {
                return $returnMessage = array('message' => '注册成功!', 'status' => true);
            }
        } else {
            // 如果用户存在，返回信息
            return $returnMessage = array('message' => '用户已存在!', 'status' => false);
        }
    }

    /**
     * 检查数据库，实现登录
     * @param array 登录的用户名和密码
     * @return array $returnMessage 返回的信息，和操作的状态
     */
    public function tryLogin($data)
    {
        // 检查用户是否存在
        $where = ['username="' . $data['username'] . '"'];
        $result = $this->select($this->table, $this->field, $where);
        if (!$result->num_rows) {
            return $returnMessage = array('message' => '用户不存在!', 'status' => false);
        } else {
            // 如果用户存在，解析返回的数据并检查密码是否正确
            $retval = $this->transform($result);
            if ($retval[0]['password'] != $data['password']) {
                return $returnMessage = array('message' => '密码错误!', 'status' => false);
            } else {
                return $returnMessage = array('message' => '前往主页', 'status' => true);
            }
        }
    }
}